package dhz.storage.util;

import dhz.storage.models.UploadTask;
import dhz.storage.models.UserUploadTasks;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

@Component
public class UploadTaskRedisUtil {

    @Autowired
    RedisTemplate<String, UserUploadTasks> template;

    /**
     * 将一个新的上传任务加入到用户的状态中
     * @param user_id 用户的id
     * @param task_id 新加入的任务的id
     * @param t 新加入的任务自己
     * */
    public void addUploadTask(String user_id, String task_id, UploadTask t){
        UserUploadTasks tasks = template.opsForValue().get(user_id);
        if(tasks == null) {
            tasks = new UserUploadTasks();
        }
        tasks.addTask(task_id, t);
        template.opsForValue().set(user_id, tasks);
    }

    /**
     * 更新redis中的用户的上传文件的状态
     * @param user_id 用户id
     * @param task_id 被更新的上传任务的id
     * @param f 目前已经上传完了多少
     * @param l 一共需要上传多少
     * */
    public void updateTask(String user_id, String task_id, long f, long l){
        UserUploadTasks tasks = template.opsForValue().get(user_id);
        if(tasks != null){
            tasks.update(task_id, f, l);
            template.opsForValue().set(user_id, tasks);
        }
    }

    /**
     * 获取一个用户全部的上传状态
     * @param user_id 用户的id
     * */
    public UserUploadTasks getUploadStatus(String user_id){
        return template.opsForValue().get(user_id);
    }

    /**
     * 删除一个用户的某项任务
     * @param user_id 被删除任务的用户的id
     * @param task_id 被删除任务的id
     * */
    public void deleteTask(String user_id, String task_id){
        UserUploadTasks t = template.opsForValue().get(user_id);
        if(t == null)return;
        t.deleteTask(task_id);
    }
}
